#ifndef TASK_QUEUE_H
#define TASK_QUEUE_H

#include<functional>
#include<mutex>
#include<queue>


class TaskQueue
{
public:
     //任务函数
    using Task=std::function<void()>;   
    TaskQueue();
    ~TaskQueue();
    bool empty();
    void Enqueue(Task task);
    Task Dequeue();
private:
    std::queue<TaskQueue::Task> _taskq;
    std::mutex _qmutex;
};

inline TaskQueue::TaskQueue()
{

}

inline TaskQueue::~TaskQueue()
{

}

//判断内容是非为空
inline bool TaskQueue::empty()
{
    return this->_taskq.empty();
}

//任务入队
inline void TaskQueue::Enqueue(Task task)
{
    std::lock_guard<std::mutex> guard(this->_qmutex);
    _taskq.push(std::move(task));
}

//任务出队
inline TaskQueue::Task TaskQueue::Dequeue()
{
    std::lock_guard<std::mutex> guard(this->_qmutex);
    TaskQueue::Task task=std::move(_taskq.front());
    _taskq.pop();
    return task;
}

#endif
